package top.lixunda.ecommerce.server.good.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import top.lixunda.common.utils.ObjectValidators;
import top.lixunda.ecommerce.server.business.BaseServiceImpl;
import top.lixunda.ecommerce.server.business.api.entity.dto.PageDTO;
import top.lixunda.ecommerce.server.good.api.entity.db.StoreDO;
import top.lixunda.ecommerce.server.good.api.entity.dto.StoreInfoQueryDTO;
import top.lixunda.ecommerce.server.good.mapper.StoreMapper;
import top.lixunda.ecommerce.server.good.service.IStoreService;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author Xumda
 * @since 2019-12-18
 */
@Service
public class StoreServiceImpl extends BaseServiceImpl<StoreMapper, StoreDO> implements IStoreService {

    /**
     * 根据id查询店铺信息，必须存在，否则抛出异常
     *
     * @param id 店铺id，不能为空，大于零的数字
     * @return 店铺基本数据
     */
    @Override
    public StoreDO queryStoreInfoById(Integer id) {
        if (ObjectValidators.isEmpty(id)) {
            throw getAppException("店铺id不能为空");
        }
        return getOne(new LambdaQueryWrapper<StoreDO>()
                .eq(StoreDO::getId, id)
                .eq(StoreDO::getState, StoreDO.STATE_NORMAL), false);
    }

    /**
     * 根据多个id查询店铺数据
     *
     * @param ids 店铺id数组，单个id为大于零的数字
     * @return 店铺基本数据列表，返回查询到的店铺信息，没查到不会抛出异常
     */
    @Override
    public List<StoreDO> queryStoreInfoByIds(List<Integer> ids) {
        if (ObjectValidators.isEmpty(ids)) {
            throw getAppException("店铺id不能为空");
        }
        return list(new LambdaQueryWrapper<StoreDO>()
                .in(StoreDO::getId, ids)
                .eq(StoreDO::getState, StoreDO.STATE_NORMAL));
    }

    /**
     * 条件分页查询店铺基本信息
     *
     * @param pageDTO 分页条件和查询条件
     * @return 分页数据
     */
    @Override
    public IPage<StoreDO> queryStoreInfoByPageWrapper(
            PageDTO<StoreDO, StoreInfoQueryDTO> pageDTO) {
        return page(pageDTO.getPage(),
                pageDTO.getWrapper(
                        wrapper -> wrapper.eq(StoreDO::getState, StoreDO.STATE_NORMAL)));
    }

    /**
     * Admin权限，条件分页查询店铺基本信息
     *
     * @param pageDTO 分页条件和查询条件
     * @return 分页数据
     */
    @Override
    public IPage<StoreDO> queryAdminInfoByPageWrapper(
            PageDTO<StoreDO, StoreInfoQueryDTO> pageDTO) {
        return page(pageDTO.getPage(),
                pageDTO.getWrapper());
    }

    /**
     * 根据店铺名称精确查询店铺信息，不存在会返回错误信息
     *
     * @param name 店铺名称，长度大于0的字符串
     * @return 店铺数据
     */
    @Override
    public StoreDO queryStoreInfoByName(String name) {
        if (ObjectValidators.isEmpty(name)) {
            throw getAppException("店铺名称不能为空");
        }
        return getOne(new LambdaQueryWrapper<StoreDO>()
                .eq(StoreDO::getName, name)
                .eq(StoreDO::getState, StoreDO.STATE_NORMAL), false);
    }

}
